const themeModel = require('../models/theme.model')
const themeTypes = require('../contants/theme-types')

const formatGoodsPrice = require('../utils/formatGoodsPrice')

const copyThemeList = require('../utils/copyList')

class ThemeController {
	constructor() {

    // 为什么其他方法无法拿到这里的 this.themeList ?
		// this.themeList = [
		// 	{ name: themeTypes.POP, hasNext: true },
		// 	{ name: themeTypes.NEW, hasNext: true },
		// 	{ name: themeTypes.SELL, hasNext: true },
		// ]

		// this.themeList.forEach((item) => {
		// 	themeModel.getThemeListLength(item.name).then(([data]) => {
		// 		item.length = data.goodsListLength
		// 	}).finally(() => {
    //     console.log('this.themeList---', this.themeList)
    //   })
		// })

	}

	async list(ctx, next) {
		// 我们发现：通过query传过来的 offset 和 size 是String类型，然后不会导致“分页查询”出现错误
		console.log('ctx.request.query:---', ctx.request.query);
		const type = ctx.request.query.type
	
		// const offset = ctx.request.query.offset
		// const size = ctx.request.query.size

		// 考虑到数据不多，为了方便起见，这里限制“分页查询”获取的数据量为8
		const page = ctx.request.query.page
		const size = 8
		const offset = (parseInt(page) - 1) * 8
		
    // 获取对应主题列表的长度
    // 前端可以自行依据 长度 跟 通过分页查询获取到的数据长度做判断，然后实现对应的主题内容的渲染
    // const result1 = await themeModel.getThemeListLength(type)
    // const goodsListLength = result1[0].goodsListLength

    // 获取对应主题列表
		// let result2 = await themeModel.getThemeList(type, offset, size)
		// fake：获取对应主题列表
		let result2 = await themeModel.getThemeList(type, 0, 8)
		// console.log('result2---', result2);

		// 对数据库返回的商品价格进行格式化处理
		// result2[0] 是一个对象
		const goodsList = result2[0].goodsList
		// result2[0].goodsList = formatGoodsPrice(goodsList)

		// ========================================================
		// fake数据：为了测试前端首页主题部分触底加载更多数据
		const tempList = copyThemeList(goodsList)
		
		// 分页查询返回的列表
		result2[0].goodsList = tempList.slice(offset, page * size)  
		// 假定为数据库中对应主题所包含的商品列表总数
		const goodsListLength = tempList.length  
		// ========================================================

		ctx.body = {
			returnCode: 200,
			data: Object.assign({}, result2[0], {goodsListLength}) 
		}
	}
}

module.exports = new ThemeController()
